/*
 * function TreeNode(x) {
 *   this.val = x;
 *   this.left = null;
 *   this.right = null;
 * }
 */

/**
 * 
 * @param root TreeNode类 
 * @param o1 int整型 
 * @param o2 int整型 
 * @return int整型
 */
function find(root,o1,o2){
  if(root === null) return null // 如果当前是空的就返回空的
  if(root.val === o1 || root.val === o2){ // 如果当前有一个值等于根节点的值
    return root //返回根节点
  }
  var left = find(root.left,o1,o2) // 查找左子树 获得左子树的返回值
  var right = find(root.right,o1,o2) // 查找右子树 获得右子树的返回值
  // if(left === null) return right // 如果左子树的返回值为null 就返回右子树的返回值
  // if(right === null) return left // 如果左子树的返回值不为空 右子树的返回值是空 就返回左子树
  // return root // 两个都不是null 就返回根节点
  if(left && right){
    return root
  }
  if(left) return left
  if(right) return right
}
 function lowestCommonAncestor( root ,  o1 ,  o2 ) {
  // write code here
  return find( root ,  o1 ,  o2).val
}
module.exports = {
  lowestCommonAncestor : lowestCommonAncestor
};